package Class.Homemade.demo0527.demo2;

import java.util.Objects;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-27
 * Time: 21:44
 */
public class Dog extends Animal implements IRunning,ISwimming {
    //1.继承父类，调用子类的构造方法对父类的成员进行初始化
    public Dog(String name, int age) {
        super(name, age);
    }
    //2.而且父类是抽象类，对父类的抽象方法进行重写
    @Override
    public void eat() {
        System.out.println(this.name+"吃狗粮......");
    }
    //3.对接口的抽象方法进行重写
    @Override
    public void running() {
        System.out.println(this.name+"正在跑......");
    }

    @Override
    public void swimming() {
        System.out.println(this.name+"正在游泳......");
    }
    //因为Object是Object接收所有类的对象：equals()方法在Object中
    //equals -> 所以可以在Dog类中重写equals方法：

    //1.对象比较equals方法
    @Override
    public boolean equals(Object obj) {
        /*几种情况：
        1.如果==左右两侧是基本类型变量，比较的是变量中值是否相同
        2.如果==左右两侧是引用类型变量，比较的是引用变量地址是否相同
        3.如果要比较对象中内容，必须重写Object中的equals方法，因为equals方法默认也是按照地址比较的：
         */
        if(obj == null) {
            return false;
        }
        if(this == obj) {
            return true;
        }
        if(!(obj instanceof Dog)) {
            return false;
        }

        Dog tmp = (Dog)obj;
        return tmp.name.equals(this.name) && tmp.age == this.age;
    }
    //2.hashcode方法，可以算出一个具体的对象位置。

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
